﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SeguroSoft.Tests.Fakes;
using SeguroSoft.Models;

namespace SeguroSoft.Tests.Model
{
    /// <summary>
    /// Summary description for TestRepositorioServicioTecnico
    /// </summary>
    [TestClass]
    public class TestRepositorioServicioTecnico
    {
        
        List<ServicioTecnico> crearServiciosTecnicosTest()
        {
            List<ServicioTecnico> servicioTecnicoTest = new List<ServicioTecnico>();

            for (int i = 0; i < 100; i++)
            {
                ServicioTecnico muestraServicioTecnico = new ServicioTecnico()
                {
                    Año = new Random().Next(1989, 2010).ToString(),
                    Km = (10000 + i*200).ToString(),
                    Marca = "Porsche",
                    Motor = "Diesel",
                    Modelo = "Carrera GT",
                    TipoBencina = (97).ToString(),
                    Costo = (100000).ToString(),
                    IDCompañia = i.ToString(),
                    IDServicioTecnico = i,
                    Direccion = "Avenida Los Libertadores 9000"
                    
                };

                servicioTecnicoTest.Add(muestraServicioTecnico);
            }

            return servicioTecnicoTest;
        }

        FakeRepositorioServicioTecnico crearRepositorioFalso()
        {
            var repositorioFalso = new FakeRepositorioServicioTecnico(crearServiciosTecnicosTest());
            return repositorioFalso;
        }

        [TestMethod]
        public void Servicios_Tecnicos_No_Encontrados_Con_Parametros_Inexistentes()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.EncontrarServicioTecnicoPorAño((2010).ToString());

            Assert.AreEqual(result.ToList().Count, 0);
        }

        [TestMethod]
        public void Todos_Los_Servicios_Tecnicos_Deberian_Ser_Encontrados()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.EncontrarTodosServiciosTecnicos();

            Assert.AreEqual(result.ToList().Count, 100);
        }

        [TestMethod]
        public void Servicios_Tecnicos_Encontrados_Segun_Kilometraje()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.EncontrarServicioTecnicoPorKilometraje((10000).ToString());

            Assert.IsInstanceOfType(result.ToList().ElementAt(0), typeof (ServicioTecnico));
        }

        [TestMethod]
        public void Servicios_Tecnicos_Encontrados_Segun_Tipo_Bencina()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.EncontrarServicioTecnicoPorTipoBencina((97).ToString());

            Assert.AreEqual(result.ToList().Count, 100);
        }

        [TestMethod]
        public void Servicios_Tecnicos_Encontrados_Segun_Modelo()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.EncontrarServicioTecnicoPorModelo("Enzo");

            Assert.AreEqual(result.ToList().Count, 0);
        }

        [TestMethod]
        public void Servicios_Tecnicos_Encontrados_Segun_Marca()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.EncontrarServicioTecnicoPorMarca("Porsche");

            Assert.AreEqual(result.ToList().Count, 100);
        }

        [TestMethod]
        public void Servicios_Tecnicos_Encontrados_Segun_Motor()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.EncontrarServicioTecnicoPorMotor((2.5).ToString());

            Assert.AreEqual(result.ToList().Count, 0);
        }

        [TestMethod]
        public void Servicio_Tecnico_Encontrado_Segun_Identificador()
        {
            var repositorioFalso = crearRepositorioFalso();

            var result = repositorioFalso.ObtenerServicioTecnico(50);

            Assert.AreEqual(result.Km, "20000");
        }
    

    }
}
